package negocio;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import util.RodamientoUtil;
import util.XMLUtil;

import negocio.documentacion.Cotizacion;
import negocio.documentacion.SolicitudCotizacion;
import negocio.items.ItemCotizacion;
import negocio.items.ItemSolicitudCotizacion;

public class Sistema {
	
	private static Sistema instancia;
	private RodamientoUtil rodamientoUtil;
	private XMLUtil xmlUtil;
	private List<OficinaDeVentas> oficinasDeVenta;
	private List<SolicitudCotizacion> solicitudesCotizacion;
	
	
	private Sistema(){
		rodamientoUtil = rodamientoUtil.obtenerInstancia();
		xmlUtil = XMLUtil.obtenerInstancia();
		oficinasDeVenta = new ArrayList<OficinaDeVentas>();
		solicitudesCotizacion = new ArrayList<SolicitudCotizacion>();
	}
	
	public static Sistema getInstancia() {
		if(instancia == null)
			instancia = new Sistema();
		return instancia;
	}

	public Cotizacion validarItemsSolicitudCotizacion(SolicitudCotizacion sc){
		solicitudesCotizacion.add(sc);
		Cotizacion cotizacion = new Cotizacion();
		cotizacion.setCliente(sc.getCliente());
		
		for(ItemSolicitudCotizacion item: sc.getItems()){
			ItemCotizacion itemCotizado = rodamientoUtil.validarRodamiento(item);
			cotizacion.getItems().add(itemCotizado);
			
			if(itemCotizado!=null && item.getCantidad() > itemCotizado.getCantidad()){
				int cantidadReemplazo =  item.getCantidad()-itemCotizado.getCantidad();
				Rodamiento aux = rodamientoUtil.obtenerRodamientoReemplazo(item);
				ItemSolicitudCotizacion itemAux = new ItemSolicitudCotizacion();
				itemAux.setCantidad(cantidadReemplazo);
				itemAux.setRodamiento(aux);
				itemCotizado = rodamientoUtil.validarRodamiento(item);
				cotizacion.getItems().add(itemCotizado);
			}
		}
		
		//cotizacion.calcularPrecioTotal();
		cotizacion.setFechaDesde(Calendar.getInstance());
		cotizacion.setFechaHasta(rodamientoUtil.vencimientoMasCercanoLista());
		
		return cotizacion;
	}
	
	public void cargarListasDeRodamientos(List<ListaDeRodamientos> lista){
		for(ListaDeRodamientos aux:lista){
			rodamientoUtil.getListasDeRodamientos().add(aux);
		}
		xmlUtil.generarListasDeRodamientos(lista);
	}

	
	
	
	/////////////////////////////////////////////////////////////////////////
	//getters y setters
	public List<OficinaDeVentas> getOficinasDeVenta() {
		return oficinasDeVenta;
	}
	
	public void setOficinasDeVenta(List<OficinaDeVentas> oficinasDeVenta) {
		this.oficinasDeVenta = oficinasDeVenta;
	}
	
	public List<SolicitudCotizacion> getSolicitudesCotizacion() {
		return solicitudesCotizacion;
	}

	public void setSolicitudesCotizacion(
			List<SolicitudCotizacion> solicitudesCotizacion) {
		this.solicitudesCotizacion = solicitudesCotizacion;
	}
}
